// cJugador

// public var m_uiNumJugador:uint												->		numero de id
// private var m_uiType:uint													->		tipo de jugador (cpu, human...)
// private var m_uiColor:uint													->		color en numero
// private var m_sName:String													->		color en cadena
// private var m_iDinero:int													->		dinero disponible por el jugador
// private var m_uiEstado:uint													->		estado del jugador (VER SI ES NECESARIO)
// private var m_uiTurnosEspera:uint											->		cantidad de turnos sin tirar
// private var m_uiCasillaActual:uint											->		casilla donde se aloja el jugador
// private var m_uiTelexSalirHaya:uint 											->		cantidad de tarjetas para salir de la haya
// private var m_vListaPropiedades:Array 										->		vector con las propiedades 
// private var m_vListaGruposCompletos:Array									->		lista de grupos completos

// public function cJugador() 													->		constructor
// private function Init():void													->		inicializacion de variables miembro
// public function CambiaTipoJugador(_avance:Boolean):void						->		modifica el tipo de jugador (cpu, human...)(para eleccion tipo heroes m&m)
// public function CambiaColorJugador(_avance:Boolean):void						->		cambia color del jugador (para eleccion tipo heroes m&m)
// public function AddDinero(_cant:int):void									->		suma o resta dinero al jugador dependiendo de la accion
// public function SetName(_name:String):void									->		da nombre al jugador
// public function GetName():String												->		obtiene nombre del jugador
// public function GetDinero():int												->		obtiene el dinero en caja del jugador
// public function SetColor(_c:uint):void										->		da color al jugador (numero)	
// public function GetColor():uint												->		obtien el color del jugador (numero)		
// public function SetCasillaActual(_c:uint):void								->		coloca al jugador en la casilla (numero) que corresponde
// public function GetCasillaActual():uint										->		recibe el numero de casilla que esta el jugador
// public function SetTurnosEspera(_t:uint):void								->		pone numeros de turno que debe esperar el jugador
// public function GetTurnosEspera():uint 										->		obtiene el numero de turnos que debe esperar el jugador
// public function DecrementaTurnosEspera():uint								->		resta turno de espera
// public function AddTelexToLeaveHaya():void									->		da una tarjeta telex al jugador para salir de la haya sin perder turnos
// public function FreeFromHaya():void											->		libera al jugador de la haya para seguir jugando sin perder turno
// public function HasTelexToLeaveHaya():Boolean								->		responde si el jugador dispone de tarjetas para salir de la haya
// public function GetListaPropiedades():Array									->		vector de propiedades del jugador	
// public function GetVectorGruposCompletos():Array								->		vector de grupos completos del jugador
// public function MueveHastaCasilla(_c:String, _tablero:cTablero):void			->		mueve a un jugador casilla a casilla al jugador hasta la casilla de nombre _c


package game.jugadores 
{
	import flash.geom.ColorTransform;
	import game.casillas.cCasilla;
	import game.juego.cDado;
	import game.juego.cTablero;
	/**
	 * ...
	 * @author miquel
	 */
	public class cJugador 
	{
		private static var PLAYER_CPU:uint				= 0;
		private static var PLAYER_HUMAN:uint			= 1;
		private static var PLAYER_NOTPLAY:uint			= 2;
		
		private static var ESTADO_TIRADADO:uint			= 1;
		private static var ESTADO_CASILLAESPECIAL:uint	= 2;
		private static var ESTADO_COMPRAPROPIEDAD:uint	= 4;
		private static var ESTADO_PIERDETURNO:uint		= 8;
		

		public var m_uiNumJugador:uint					= 0;
		private var m_uiType:uint						= PLAYER_HUMAN;
		private var m_uiColor:uint						= 0x000000;
		private var m_sName:String						= "";		//Generacion inicial
		private var m_iDinero:int						= 0;
		private var m_uiEstado:uint						= 0;
		private var m_uiTurnosEspera:uint				= 0;
		private var m_uiCasillaActual:uint				= 0;
		private var m_uiTelexSalirHaya:uint 			= 0;
		
		//Propiedades en cuanto a casillas, etc...
		private var m_vListaPropiedades:Array 			= null;
		private var m_vListaGruposCompletos:Array		= null;
		
		public function cJugador() 
		{
//			trace("cJugador.as::cJugador::" + m_sName);
			Init();
		}
		
		private function Init():void
		{
			//m_bReady = false;
			m_vListaPropiedades = new Array();
			m_vListaGruposCompletos = new Array();
			//if (m_vListaGruposCompletos == null || m_vListaPropiedades == null)
			//{
				//m_bReady = false;
			//}
		}
		
		public function CambiaTipoJugador(_avance:Boolean):void
		{
			if (_avance)
			{
				//incrementa
				m_uiType++;
				m_uiType = m_uiType % (PLAYER_NOTPLAY + 1);
			}
			else
			{
				//decrementa
				m_uiType--;
				if (m_uiType < 0)
				{
					m_uiType = PLAYER_NOTPLAY;
				}
			}
		}
		
		public function CambiaColorJugador(_avance:Boolean):void
		{
			if (_avance)
			{
				//incrementa
				
			}
			else
			{
				//decrementa
			}
		}
		
		
		/**
		 * AddDinero: Suma (o resta una cantidad negativa) una cantidad 
		 * @param	_cant
		 */
		public function AddDinero(_cant:int):void
		{
			m_iDinero += _cant;
		}
		
		
		public function SetName(_name:String):void
		{
			m_sName = _name;
		}


		public function GetName():String
		{
			return m_sName;
		}
		
		
		public function GetDinero():int
		{
			return m_iDinero;
		}
		
		public function SetColor(_c:uint):void
		{
			m_uiColor = _c;
		}

		public function GetColor():uint
		{
			return m_uiColor;
		}
		
		public function SetCasillaActual(_c:uint):void
		{
			m_uiCasillaActual = _c;
		}
		
		public function GetCasillaActual():uint
		{
			return m_uiCasillaActual;
		}
		
		public function SetTurnosEspera(_t:uint):void
		{
			trace("cJugador:SetTurnosEspera:" + GetName() + " tiene que esperar " + _t  + " turnos");
			m_uiTurnosEspera = _t;
		}
		
		public function GetTurnosEspera():uint 
		{
			return m_uiTurnosEspera;
		}

		public function	DecrementaTurnosEspera():uint
		{
			if (m_uiTurnosEspera > 0)
			{
				m_uiTurnosEspera --;
			}
			
			return m_uiTurnosEspera;
		}
		
		public function AddTelexToLeaveHaya():void
		{
			m_uiTelexSalirHaya ++;
		}
		
		public function FreeFromHaya():void
		{
			if (HasTelexToLeaveHaya())
				m_uiTelexSalirHaya --;
		}
		
		public function HasTelexToLeaveHaya():Boolean
		{
			return (m_uiTelexSalirHaya > 0);
		}
		
		public function GetListaPropiedades():Array
		{
			return m_vListaPropiedades;

		}
		
		public function GetVectorGruposCompletos():Array
		{
			return m_vListaGruposCompletos;
		}
		
		
		public function MueveHastaCasilla(_c:String, _tablero:cTablero):void
		{
			trace("******Mover hasta la casilla " + _c);
			var l_pCasillaActual:Object = _tablero.GetVectorTablero()[m_uiCasillaActual];
			if (l_pCasillaActual != null)
			{
				while (_c != l_pCasillaActual._nombre)
				{
					trace("busca " + _c + " y esta en " + l_pCasillaActual._nombre);		
						
					if ( (_tablero.GetVectorTablero().length -1) > m_uiCasillaActual)
					{
						m_uiCasillaActual ++;
					}
					else
					{
						m_uiCasillaActual = 0;
					}
					
					l_pCasillaActual = _tablero.GetVectorTablero()[m_uiCasillaActual];
				}

				trace("busca " + _c + " y esta en " + l_pCasillaActual._nombre);		
			}
		}
		
/**
 * JugadorLanzaDados:
 * @return el numero obtenido por los dados
 */
		public function LanzaDados(dado1:cDado, dado2:cDado):uint
		{
			return dado1.LanzaDado() + dado2.LanzaDado();
		}
		
		
	}

}